//
// Description: 5876.数组美丽值求和
// Created by Loading on 2021/9/21.
//

#include <bits/stdc++.h>

using namespace std;

int sumOfBeauties(vector<int> &nums) {
    int n = nums.size();
    // 维护 不包含当前位置的左侧的最大值 和 右侧的最小值数组
    vector<int> min_nums(n), max_nums(n);
    // 初始化两个数组
    max_nums[0] = nums[0];
    min_nums[n - 1] = nums[n - 1];
    for (int i = 1; i < n; ++i) {
        max_nums[i] = max(max_nums[i - 1], nums[i - 1]);
    }
    for (int i = n - 2; i >= 0; --i) {
        min_nums[i] = min(min_nums[i + 1], nums[i + 1]);
    }

    int res = 0;
    for (int i = 1; i < n - 1; ++i) {
        if (max_nums[i] < nums[i] && min_nums[i] > nums[i]) {
            // 当前位置比左侧最大值大，且比右侧的最小值小
            res += 2;
        } else if (nums[i] > nums[i - 1] && nums[i] < nums[i + 1]) {
            // 当前位置比相邻左侧值大，比相邻右侧值小
            res += 1;
        }
    }

    return res;
}

int main() {
    vector<int> nums = {2, 4, 6, 4};
    int res = sumOfBeauties(nums);
    cout << res << endl;

    return 0;
}